// 管理前台的所有 api

const Controller = require('egg').Controller;

class HomeController extends Controller {

    async index(e) {
        

        // let result = await this.app.mysql.get('articles');
        this.ctx.body = {
            data:'欢迎使用 hotpot_blog 的前台数据接口'
        };
        
    }

    // 获取所有文章的描述信息，用来list展示文章 todo：分页查询，只查询时间最近的 10 篇文章；
    async getArticleList() {

        const sql = 'select article_id,tag_id,title,description,img_url,publish_date,view_num,star_num,share_num,comment_num  from articles order by publish_date desc;';
        
        const result = await this.app.mysql.query(sql);
        console.log('调用 getArticleList,获取数据');
        this.ctx.body = {
            data:result
        };
    }

    // 获取某篇文章 todo:通过正则获取url中携带的id
    async getArticle(e) {
        
        let article_id = null;
        let result = '';

        try{
            let queryStr = '{"' + e.request.url.split('?')[1].replace(/=/g,'":').replace(/&/g,';"') + '}';
            
            article_id = Number(JSON.parse(queryStr).id);
        }catch(err) {

            
            this.ctx.body = {
                data:"请输入正确的 id"
            }

            throw err;
        }


        const sql = `select * from articles where article_id=${article_id};`; // 这会有 sql注入危险
        result = await this.app.mysql.query(sql);

        if(!result.toString()) {

            this.ctx.body = {
                data:'查询失败，无此数据'
            }

        } else {


            // 将时间处理成年月日
            result[0].publish_date = result[0].publish_date.toLocaleDateString();
            result[0].update_date = result[0].update_date.toLocaleDateString();
            this.ctx.body = {
                data:result
            };

            
            // 增加文章查看人数 todo:考虑多用户并发，建立锁机制
            const update_sql = `update articles set view_num=${Number(result[0].view_num + 1)} where article_id=${article_id};`;
            const view_num = await this.app.mysql.query(update_sql);

        }

    }

    // 获取指定类型的文章
    async getLifeArticleList(e) {

        let type_id = null;
        let result = '';

        try{
            let queryStr = '{"' + e.request.url.split('?')[1].replace(/=/g,'":').replace(/&/g,';"') + '}';
            
            type_id = JSON.parse(queryStr).typeid;
        }catch(err) {

            
            this.ctx.body = {
                data:"请输入正确的 type"
            }

            throw err;
        }


        const sql = `select * from articles as a,article_tag as b,article_type as c
                        where a.tag_id=b.tag_id and b.type_id=c.type_id and c.type_id=4 order by a.publish_date desc;`; // 这会有 sql注入危险
        result = await this.app.mysql.query(sql);

        if(!result.toString()) {

            this.ctx.body = {
                data:'查询失败，无此数据'
            }

        } else {
            
            this.ctx.body = {
                data:result
            };

        }
    }
}

module.exports = HomeController;